package fr.emn.integration.synthese.controle;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JButton;

import fr.emn.integration.synthese.abstraction.Cours;
import fr.emn.integration.synthese.presentation.NoteDialog;

public class ControlJButtonEditNote implements Observer, ActionListener{
	
	private Cours modele;
	private JButton button;
	private Frame parent;
	
	public ControlJButtonEditNote(Frame parent, Cours modele, JButton button) {
		this.modele = modele;
		this.button = button;
		this.parent = parent;
		button.setEnabled(false);
	}


	@Override
	public void actionPerformed(ActionEvent arg0) {
		NoteDialog evaldialog = null;
		try {
			evaldialog = new NoteDialog(parent, modele);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		evaldialog.setVisible(true);
	}

	@Override
	public void update(Observable o, Object message) {
		Integer iMessage = (Integer) message;
		if (iMessage == Cours.CHANGEMENT_EVALUATION_COURANT) {
			if (modele.getEvaluationCourante() == -1)
				button.setEnabled(false);
			if(modele.getEleveCourante()==null)
				button.setEnabled(false);
			try {
				if(modele.evaluationDefinitive(modele.getEvaluationCourante(), modele.getGroupeCourante(), modele.getModuleCourante())){
					button.setEnabled(false);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
		if (iMessage == Cours.CHANGEMENT_ELEVE_COURANT ) {
			try {
				if (modele.getEleveCourante()!=null && modele.getEvaluationCourante()!=-1 && !modele.noteDefinitive(modele.getEleveCourante(), modele.getEvaluationCourante(), modele.getModuleCourante())) {
				button.setEnabled(true);
				} else {
					button.setEnabled(false);
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			try {
				if(modele.evaluationDefinitive(modele.getEvaluationCourante(), modele.getGroupeCourante(), modele.getModuleCourante()) || modele.noteDefinitive(modele.getEleveCourante(), modele.getEvaluationCourante(), modele.getModuleCourante())){
					button.setEnabled(false);
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		if(iMessage == Cours.EVALUATION_DEFINITIVE){
			button.setEnabled(false);
		}
		if(iMessage == Cours.NOTE_DEFINITIVE){
			button.setEnabled(false);
		}
		if(iMessage == Cours.CHANGEMENT_MODULE_COURANT){
			button.setEnabled(false);
		}
	}

}
